home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / pcgames.arc / B747.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1983-04-10  |  25.4 KB  |  1,060 lines

  1. 1  REM:PROGRAM NAME = JETSET
  2. 2  REM:IFR FLIGHT SIMULATOR (BOEING 747)
  3. 3  REM:CREATED 06/28/81 BY JEAN SZYMANSKI
  4. 4  REM:REVISED 02/25/82 - INSTRUCTIONS IN NOVEMBER 1982 'BYTE MAGAZINE'
  5. 9  REM:SYSTEM "CLOCK OFF"
  6. 10  GOTO 10000
  7. 23  REM:BEGIN CRUISE MODULE HERE
  8. 24  CLS:CLEAR 2000:RANDOMIZE 57.2958
  9. 25  DIM M$(20)
  10. 26  KR=57.2958:XQ=64
  11. 27  RS=1:IF RND(0)<0.5 THEN RS=-1
  12. 28  RW=(15-5)*RND(0)+5
  13. 29  RW=RS*RW
  14. 30  REM:SET UP WIND TABLE
  15. 32  DIM WA(10,1)
  16. 34  FOR I=0 TO 7:WA(I,0)=RND(359):NEXT
  17. 36  FOR I=8 TO 10:WA(I,0)=90*RND(0)+225:NEXT
  18. 38  A=0
  19. 40  FOR I=1 TO 10:WA(I,1)=25*RND(0)+A:A=A+25:NEXT
  20. 41  RS$(0)=STRING$(31,"_")
  21. 42  RS$(1)=SPACE$(13)+".   ."+SPACE$(13)
  22. 43  RS$(2)=SPACE$(11)+".       ."
  23. 44  RS$(3)=SPACE$(9)+STRING$(13,"_")
  24. 45  REM:VOR STATION FREQUENCY TABLE
  25. 46  DIM VF(15)
  26. 47  VF(0)=115.9:VF(1)=113.8:VF(2)=112.7
  27. 48  VF(3)=117.7:VF(4)=117.8:VF(5)=112.2
  28. 49  VF(6)=117.4:VF(7)=115.5:VF(8)=116.4
  29. 50  VF(9)=113.6:VF(10)=116.9:VF(11)=117
  30. 51  VF(12)=112.3:VF(13)=117.9:VF(14)=115.7
  31. 52  VF(15)=112.8
  32. 62  REM:ILS CONSTANTS FOR AIRPORTS
  33. 63  DIM VG(15,1)
  34. 64  VG(0,0)=238:VG(0,1)=28
  35. 66  VG(2,0)=240:VG(2,1)=30
  36. 69  VG(5,0)=90:VG(5,1)=217
  37. 71  VG(7,0)=299:VG(7,1)=164
  38. 72  VG(8,0)=166:VG(8,1)=42
  39. 79  VG(15,0)=341:VG(15,1)=75
  40. 100  REM:VOR STATION COORDIATES TABLE
  41. 101  DIM VP(15,1)
  42. 102  VP(0,0)=40.633:VP(0,1)=73.773
  43. 103  VP(1,0)=40.202:VP(1,1)=74.495
  44. 104  VP(2,0)=42.358:VP(2,1)=70.993
  45. 105  VP(3,0)=41.282:VP(3,1)=70.027
  46. 106  VP(4,0)=42.743:VP(4,1)=73.802
  47. 107  VP(5,0)=46.412:VP(5,1)=84.315
  48. 108  VP(6,0)=38.35:VP(6,1)=81.77
  49. 109  VP(7,0)=40.917:VP(7,1)=77.993
  50. 110  VP(8,0)=42.928:VP(8,1)=78.674
  51. 111  VP(9,0)=41.358:VP(9,1)=82.162
  52. 112  VP(10,0)=42.967:VP(10,1)=83.724
  53. 113  VP(11,0)=44.555:VP(11,1)=88.195
  54. 114  VP(12,0)=41.547:VP(12,1)=88.318
  55. 115  VP(13,0)=39.495:VP(13,1)=76.978
  56. 116  VP(14,0)=42.048:VP(14,1)=83.458
  57. 117  VP(15,0)=39.637:VP(15,1)=75.303
  58. 155  DATA FUEL,LBS,%,VHF,MHZ,THRUST,MAX,IDLE,REV
  59. 160  DATA PITCH," +"," -",DEG,FLAPS,UP,DWN,WHEELS,UP,MID,DOWN
  60. 165  DATA COMPASS,AIRSPEED,KTS," VERT",SPEED,FPM
  61. 170  DATA ALTITUDE,FEET,CLOCK
  62. 175  DIM P$(28)
  63. 180  FOR I=0 TO 28:READ P$(I):NEXT
  64. 185  DIM S$(25)
  65. 190  FOR I=1 TO 25:S$(I)=SPACE$(I):NEXT
  66. 192  FOR I=0 TO 9:F(I)=0:NEXT
  67. 195  REM:INIT FLIGHT VARIABLES TO STATE AT LIFTOFF
  68. 196  FU=195480:FP=63:CC=75:ZS=380:RC=6704:AL=1900
  69. 198  MZ=122:TR=4:FL=1:FA=10:BR=10:WH=10
  70. 200  RA=0:ZS(1)=380:FA(1)=10:CC(1)=75:AL(1)=1900:RP=40
  71. 201  DP(4)=39:DP(5)=52:DP(6)=75:DP(7)=15
  72. 202  L1=39.8667:G1=75.25:LL(1)=L1:GL(1)=G1:LS(1)=L1:GS(1)=G1
  73. 203  VO(1)=0:VO$(1)="OUT ":VO(3)=0:VO(4)=999.9
  74. 204  GX(0)=0:GY(0)=0
  75. 205  XO=36481:YO=0
  76. 220  TV$=TIME$:GOSUB 7050:TL=TD
  77. 221  TW(1)=TD
  78. 222  GOSUB 335
  79. 224  GOSUB 600
  80. 300  K$=INKEY$:IF LEN(K$)=0 GOTO 304
  81. 302  GOSUB 800
  82. 304  GOTO 1000
  83. 335  REM:DISPLAY PANEL (HEADERS ONLY)
  84. 340  LOCATE 1,4:PRINT P$(0);S$(4);P$(5);S$(3);P$(9);S$(3);S$(6);S$(3);P$(20)
  85. 341  LOCATE 10,55:PRINT P$(13);S$(3);P$(16)
  86. 342  LOCATE 11,57:PRINT P$(14);S$(6);P$(14)
  87. 343  LOCATE 13,57:PRINT P$(15);S$(5);P$(15)
  88. 345  LOCATE 2,14:PRINT P$(6);S$(6);P$(10);S$(6)
  89. 350  LOCATE 2,69:PRINT P$(28)
  90. 355  LOCATE 3,2:PRINT P$(1);S$(4);P$(2);S$(21);S$(3);S$(13);P$(23)
  91. 360  LOCATE 4,23:PRINT P$(11);S$(13);P$(21);S$(2);P$(24);S$(2);P$(26)
  92. 365  LOCATE 5,1:PRINT P$(3)
  93. 370  LOCATE 6,40:PRINT P$(22);S$(6);P$(25);S$(5);P$(27)
  94. 375  LOCATE 7,1:PRINT P$(4);S$(10);P$(7);S$(3);P$(12);S$(7)
  95. 380  LOCATE 8,14:PRINT P$(8)
  96. 381  LOCATE 4,69:PRINT"VLF OMEGA":LOCATE 5,66:PRINT"LAT"
  97. 382  LOCATE 6,65:PRINT"LONG"
  98. 383  LOCATE 7,33:PRINT". . . . : . . . .":LOCATE 9,40:PRINT"RUD"
  99. 384  LOCATE 10,33:PRINT CHR$(201);STRING$(15,205);CHR$(187)
  100. 386  FOR X = 32 TO 48 STEP 16
  101. 387  FOR Y = 10 TO 22
  102. 388  LOCATE (Y+1),(X+1):PRINT CHR$(186);
  103. 389  NEXT Y
  104. 390  NEXT X
  105. 391  LOCATE 24,33:PRINT CHR$(200);STRING$(15,205);CHR$(188);
  106. 392  LOCATE 11,40:PRINT"VOR":LOCATE 12,45:PRINT"MHZ"
  107. 393  LOCATE 15,39:PRINT"RANGE"
  108. 394  LOCATE 17,36:PRINT".....:....."
  109. 395  LOCATE 20,39:PRINT"RADIAL"
  110. 396  LOCATE 22,40:PRINT"DME":LOCATE 23,45:PRINT"NM";
  111. 397  FOR Y = 1 TO 7:LOCATE (Y+1),13:PRINT CHR$(195):NEXT
  112. 398  FOR Y = 1 TO 3:LOCATE (Y+1),22:PRINT CHR$(195):NEXT
  113. 400  LOCATE 15,1:PRINT CHR$(201);STRING$(15,205);CHR$(187)
  114. 402  FOR X = 0 TO 16 STEP 16
  115. 404  FOR Y = 15 TO 21
  116. 406  LOCATE (Y+1),(X+1):PRINT CHR$(186);
  117. 408  NEXT Y
  118. 410  NEXT X
  119. 412  LOCATE 23,1:PRINT CHR$(200);STRING$(15,205);CHR$(188);
  120. 414  LOCATE 14,8:PRINT"ILS"
  121. 416  LOCATE 18,20:PRINT"MARKER":LOCATE 19,21:PRINT">  <"
  122. 418  GX(1)=0:GY(1)=0
  123. 420  GOSUB 2100
  124. 422  COLOR 0,7:LOCATE 11,8:PRINT"     "
  125. 424  COLOR 7,0:LOCATE 10,5:PRINT"RADAR ALT";SPC(6);"STALL"
  126. 425  LOCATE 11,19:PRINT">     <"
  127. 599  RETURN
  128. 600  REM:DISPLAY INSTRUMENT READINGS
  129. 601  GOTO 720
  130. 605  YP=1:XP=0:F$="######":V1=FU:GOSUB 9000
  131. 606  LOCATE 1,67:COLOR 0,7:PRINT TIME$:COLOR 7,0
  132. 610  YP=1:XP=7:F$="###":V1=FP:GOSUB 9000
  133. 615  YP=1:XP=39:V1=CC:GOSUB 9000
  134. 620  YP=4:XP=39:V1=ZS:GOSUB 9000
  135. 625  YP=4:XP=46:F$="######":V1=RC:GOSUB 9000
  136. 630  YP=4:XP=55:F$="##,###":V1=AL:GOSUB 9000
  137. 635  YP=5:XP=0:F$="###":V1=MZ:GOSUB 9000
  138. 636  IF F(2)=1 THEN YP=10:XP=6:F$="#####":V1=AL:GOSUB 9000
  139. 640  REM:DISPLAY THRUST
  140. 650  FOR I = 1 TO 7
  141. 651  LOCATE (I+1),12:PRINT" ";CHR$(195)
  142. 652  NEXT
  143. 655  LOCATE (TR+1),12:PRINT">";
  144. 660  REM:DISPLAY FLAPS
  145. 665  FOR I = 1 TO 3:LOCATE (I+1),21:PRINT" ";CHR$(195):NEXT
  146. 670  LOCATE (FL+1),21:PRINT">"
  147. 674  F$="+###"
  148. 675  YP=5:XP=20:V1=FA:GOSUB 9000
  149. 676  IF F(6)=0 THEN SX=25:COLOR 7,0:GOTO 679
  150. 677  IF SX=25 THEN SX=26:COLOR 0,7:GOTO 679
  151. 678  SX=25
  152. 679  IF F(7)=0 THEN LOCATE 11,20:PRINT"     ":COLOR 7,0
  153. 680  REM:DISPLAY BRAKES
  154. 690  FOR I=10 TO 12:LOCATE (I+1),55:PRINT" ";CHR$(195):NEXT
  155. 695  LOCATE (BR+1),55:PRINT">"
  156. 700  REM:WHEELS
  157. 705  FOR I=10 TO 12:LOCATE (I+1),63:PRINT" ";CHR$(195):NEXT
  158. 710  LOCATE (WH+1),63:PRINT">"
  159. 711  IF F(2)=1 GOTO 723
  160. 712  REM:DISPLAY LAT/LONGDITUDE
  161. 713  YP=4:XP=69:F$="###":V1=DP(4):GOSUB 9000
  162. 714  YP=4:XP=73:F$="##.#":V1=DP(5):GOSUB 9000
  163. 715  YP=5:XP=69:F$="###":V1=DP(6):GOSUB 9000
  164. 716  YP=5:XP=73:F$="##.#":V1=DP(7):GOSUB 9000
  165. 717  LOCATE 5,79:PRINT"N"
  166. 718  LOCATE 6,79:PRINT"W"
  167. 719  GOTO 723
  168. 720  REM:DISPLAY RUDDER POSITION
  169. 721  LOCATE 8,33:COLOR 0,7:PRINT S$(17)
  170. 722  LOCATE 8,(RP+1):PRINT CHR$(186):COLOR 7,0:GOTO 605
  171. 723  IF F(2)=1 THEN RETURN
  172. 724  REM:DISPLAY VOR VALUES
  173. 725  YP=11:XP=38:F$="###.#":V1=VO(1):GOSUB 9000
  174. 726  COLOR 0,7:LOCATE 14,40:PRINT VO$(1):COLOR 7,0
  175. 727  YP=18:XP=39:F$="###":V1=VO(3):GOSUB 9000
  176. 728  YP=22:XP=38:F$="###.#":V1=VO(4):GOSUB 9000
  177. 729  COLOR 0,7:LOCATE 18,35:PRINT S$(13):COLOR 7,0
  178. 730  IF VO$(1)="OUT " GOTO 732
  179. 731  LOCATE 18,(VO(2)+1):PRINT CHR$(24)
  180. 732  RETURN
  181. 800  REM:KEY POLL SUBROUT
  182. 805  IF K$="F" OR K$="S" THEN KK=1:GOTO 850
  183. 810  IF K$="," OR K$="." THEN KK=2:GOTO 850
  184. 811  IF K$="/" THEN RA=0:GOTO 855
  185. 825  IF K$="U" OR K$="D" THEN KK=3:GOTO 850
  186. 830  IF K$="W" THEN KK=4:GOTO 850
  187. 835  IF K$="V" THEN KK=5:GOTO 850
  188. 836  IF K$="R" THEN KK=6:GOTO 850
  189. 837  IF K$="L" THEN KK=7:GOTO 850
  190. 838  IF K$="A" THEN KK=8:GOTO 850
  191. 839  IF K$="Q" THEN KK=9:GOTO 850
  192. 840  IF K$="M" THEN KK=10:GOTO 850
  193. 841  IF K$="C" THEN KK=11:GOTO 850
  194. 850  ON KK GOSUB 900,908,914,928,931,935,940,944,946,950,953
  195. 855  RETURN
  196. 900  REM:THRUST KEY
  197. 902  IF K$="F" THEN TR=TR-1 ELSE TR=TR+1
  198. 904  IF TR<1 THEN TR=1:RETURN
  199. 908  REM:RUDDER KEYS
  200. 909  IF K$="," GOTO 912 ELSE RA=RA+1
  201. 910  IF RA>4 THEN RA=4
  202. 911  RETURN
  203. 912  RA=RA-1:IF RA<-4 THEN RA=-4
  204. 913  RETURN
  205. 914  REM:ELEVATOR KEYS
  206. 915  J=5:IF BR=12 THEN J=1
  207. 916  IF K$="U" THEN FA=FA+J ELSE FA=FA-J
  208. 918  IF FA>40 THEN FA=40
  209. 920  IF FA<-40 THEN FA=-40
  210. 922  IF FA>0 THEN FL=1:RETURN
  211. 924  IF FA=0 THEN FL=2:RETURN
  212. 926  FL=3:RETURN
  213. 928  REM:WHEELS KEY
  214. 929  IF WH=10 THEN WH=12:RETURN
  215. 930  IF WH=12 THEN WH=10:RETURN
  216. 931  REM:SET VOR FREQ
  217. 932  LOCATE 15,56
  218. 933  LINE INPUT"VOR FREQ ";VX$:VO(1)=VAL(VX$)
  219. 934  LOCATE 15,56:PRINT SPC(16):RETURN
  220. 935  REM:SET VOR RADIAL
  221. 936  LOCATE 15,56
  222. 937  LINE INPUT"VOR RADIAL ";VX$:VO(3)=VAL(VX$)
  223. 938  LOCATE 15,56:PRINT SPC(14):RETURN
  224. 940  REM:FLAPS KEY
  225. 941  IF BR=10 THEN BR=12:RETURN
  226. 942  IF BR=12 THEN BR=10:RETURN
  227. 944  REM:AUTO - OBS KEY
  228. 945  F(3)=1:RETURN
  229. 946  REM:REVERSE THRUST KEY
  230. 947  IF F(7)=1 THEN TR=7
  231. 948  RETURN
  232. 950  REM:MISSED APPROACH KEY
  233. 951  IF F(2)=1 THEN F(5)=1
  234. 952  RETURN
  235. 953  REM:FLARE KEY
  236. 954  IF F(2)=0 THEN FA=0:FL=2:RETURN
  237. 955  FA=1:FL=1:RETURN
  238. 1000  REM:SITUATION UPDATE ROUTINE
  239. 1002  TV$=TIME$:GOSUB 7050:TJ=TD-TL:TL=TD
  240. 1010  GOSUB 1100
  241. 1012  GOSUB 1130
  242. 1013  GOSUB 1145
  243. 1014  IF TR=7 THEN GOSUB 1800 ELSE GOSUB 1124
  244. 1016  GOSUB 1106
  245. 1018  GOSUB 1114
  246. 1019  IF F(2)=1 GOTO 1600
  247. 1020  GOSUB 1400
  248. 1021  GOSUB 1500
  249. 1030  IF AL<=0 THEN AF=1:GOTO 3000
  250. 1031  IF F(2)=0 GOTO 1099
  251. 1032  IF AL>0 GOTO 1068
  252. 1033  IF F(7)=1 GOTO 1090
  253. 1034  F(7)=1
  254. 1036  TY=YN
  255. 1038  TX=XN-750
  256. 1042  IF FA>1 THEN AF=2:GOTO 3000
  257. 1044  IF FA<0 THEN AF=3:GOTO 3000
  258. 1046  IF F(6)=0 GOTO 1062
  259. 1048  IF AX>100 THEN AF=4:GOTO 3000
  260. 1050  IF AX>80 THEN AF=5:GOTO 3000
  261. 1052  IF WH=10 THEN AF=6:GOTO 3000
  262. 1054  IF TX>0 THEN AF=7:GOTO 3000
  263. 1056  IF TX<-10500 THEN AF=7:GOTO 3000
  264. 1058  IF ABS(TY)>100 THEN AF=7:GOTO 3000
  265. 1060  GOTO 1099
  266. 1062  AF=8:GOTO 3000
  267. 1068  IF F(5)=1 GOTO 1082
  268. 1070  IF FA>0 GOTO 1076
  269. 1072  IF FA<0 THEN F(6)=0
  270. 1074  GOTO 1099
  271. 1076  IF F(6)=0 THEN AX=AL:F(6)=1
  272. 1077  IF TR=6 GOTO 1080
  273. 1078  IF FA<2 THEN RC=-1800:GOTO 1099
  274. 1079  FA=2:FL=1:RC=-1800:GOTO 1099
  275. 1080  FA=1:FL=1:RC=-300:GOTO 1099
  276. 1082  IF AL<20 THEN AF=9:GOTO 3000
  277. 1084  TR=3:FA=0:FL=2
  278. 1086  AF=10:GOTO 3000
  279. 1090  IF XN<-9750 OR ABS(YN)>100 GOTO 1094
  280. 1091  IF ZS>0 GOTO 1099
  281. 1092  AF=0:GOTO 3000
  282. 1094  AF=9:GOTO 3000
  283. 1099  GOTO 1700
  284. 1100  REM:UPDATE FUEL
  285. 1102  FU=FU-(14-TR)*TJ:IF FU<0 THEN FU=0
  286. 1104  FP=FU/3120:RETURN
  287. 1106  IF F(7)=1 THEN RC=0:RETURN
  288. 1107  IF F(6)=1 THEN RETURN
  289. 1108  RC=ZS*SIN(ABS(FA/KR))*101.6
  290. 1110  IF FA<0 THEN RC=-1*RC
  291. 1112  RETURN
  292. 1114  REM:UPDATE ALTITUDE
  293. 1115  IF F(7)=1 THEN RETURN
  294. 1116  AL=AL+TJ*RC/60
  295. 1118  IF AL<0 THEN AL=0:RETURN
  296. 1120  IF AL>45000 THEN AL=45000
  297. 1122  RETURN
  298. 1124  REM:UPDATE AIRSPEED
  299. 1125  ZS=800-100*TR
  300. 1126  ZS=ZS-2*FA
  301. 1127  IF BR=10 THEN RETURN
  302. 1128  ZS=ZS/3+20:RETURN
  303. 1130  IF F(5)=1 GOTO 1132
  304. 1131  IF F(2)=1 GOTO 1142
  305. 1132  IF RA=0 THEN RT=0:RETURN
  306. 1133  IF RA<0 THEN J=-1 ELSE J=1
  307. 1134  RA=ABS(RA):IF RA=1 THEN RT=1:GOTO 1137
  308. 1135  IF RA=2 THEN RT=10:GOTO 1137
  309. 1136  IF RA=3 THEN RT=20 ELSE RT=30
  310. 1137  RT=J*RT:RA=J*RA
  311. 1138  CC=CC+RT
  312. 1139  IF CC=>360 THEN CC=CC-360:RETURN
  313. 1140  IF CC<0 THEN CC=360+CC
  314. 1141  RETURN
  315. 1142  IF RA=0 THEN RETURN
  316. 1143  IF RA<0 THEN CC=CC-1 ELSE CC=CC+1
  317. 1144  RA=0:GOTO 1139
  318. 1145  REM:UPDATE RUDDER POSITION VALUE
  319. 1146  RP=40+RA+RA:RETURN
  320. 1200  REM:COMPUTES DIST & BEARING TO A KNOWN POINT LOCATION
  321. 1202  VL=ABS(LB-LC):BL(5)=-1:IF LB=>LC THEN BL(5)=1
  322. 1204  VG=ABS(GB-GC):BL(4)=1:IF GB=>GC THEN BL(4)=-1
  323. 1206  LA=LC:GOSUB 2400
  324. 1208  M1=MP
  325. 1210  LA=LB:GOSUB 2400
  326. 1212  M2=MP:DM=ABS(M2-M1)
  327. 1214  IF DM=0 GOTO 1220
  328. 1216  QO=VG/(DM/60):IF QO>114.59 GOTO 1220
  329. 1218  CA=KR*ATN(QO):DR=VL*(1/COS(CA/KR)):GOTO 1222
  330. 1220  CA=90:DR=VG*COS(LC/KR)
  331. 1222  DR=DR*60:IF BL(5)=-1 GOTO 1226
  332. 1224  IF BL(4)=1 THEN CR=CA ELSE CR=360-CA
  333. 1225  RETURN
  334. 1226  IF BL(4)=1 THEN CR=180-CA ELSE CR=180+CA
  335. 1228  RETURN
  336. 1250  REM:GET WIND VECTOR FOR CURRENT ALTITUDE
  337. 1252  I=FIX(AL/4000):IF I=>10 THEN I=10
  338. 1254  WD=WA(I,0):WV=WA(I,1)
  339. 1256  RETURN
  340. 1260  REM:SOLVES WIND TRIANGLE
  341. 1262  A=CC:L=AJ:GOSUB 1300
  342. 1264  MX=LX:MY=LY
  343. 1266  GOSUB 1250
  344. 1268  A=WD+180:IF A=>360 THEN A=A-360
  345. 1270  L=WV:GOSUB 1300
  346. 1272  MX=MX+LX:MY=MY+LY:GOSUB 1350
  347. 1274  TK=MA:GS=VZ
  348. 1276  RETURN
  349. 1300  REM:RESOLVES A VECTOR INTO RECT. COORDS
  350. 1302  IF A<=90 THEN Q=1:B=90-A:GOTO 1310
  351. 1304  IF A<=180 THEN Q=2:B=A-90:GOTO 1310
  352. 1306  IF A<=270 THEN Q=3:B=270-A:GOTO 1310
  353. 1308  Q=4:B=A-270
  354. 1310  LX=L*COS(B/KR):LY=L*SIN(B/KR)
  355. 1312  IF Q=1 THEN RETURN
  356. 1314  IF Q=2 THEN LY=-1*LY:RETURN
  357. 1316  IF Q=3 THEN LX=-1*LX:LY=-1*LY:RETURN
  358. 1318  LX=-1*LX
  359. 1320  RETURN
  360. 1350  REM:COMPOSES X,Y COMPONENTS INTO A POLAR VECTOR
  361. 1352  VZ=SQR(MX^2+MY^2)
  362. 1354  IF MX<=0 GOTO 1358
  363. 1356  IF MY<=0 THEN Q=2 ELSE Q=1
  364. 1357  GOTO 1360
  365. 1358  IF MY<=0 THEN Q=3 ELSE Q=4
  366. 1360  IF MX=0 THEN MA=90:GOTO 1366
  367. 1362  MQ=ABS(MY/MX)
  368. 1364  MA=ATN(MQ)*KR
  369. 1366  IF Q=1 THEN MA=90-MA:RETURN
  370. 1368  IF Q=2 THEN MA=90+MA:RETURN
  371. 1370  IF Q=3 THEN MA=270-MA:RETURN
  372. 1372  MA=270+MA
  373. 1374  RETURN
  374. 1400  REM:GET POSITION FOR OMEGA DISPLAY
  375. 1402  ZS(2)=ZS:FA(2)=FA:CC(2)=CC:AL(2)=AL
  376. 1404  ZS=ZS(1):FA=FA(1):CC=CC(1):AL=AL(1)
  377. 1406  IF ZS(2)<>ZS OR FA(2)<>FA GOTO 1440
  378. 1408  IF CC(2)<>CC OR AL(2)<>AL GOTO 1440
  379. 1410  F(0)=1:IF TD<TW(1)+60 GOTO 1442
  380. 1412  AJ=ZS*COS(ABS(FA)/KR)
  381. 1414  GOSUB 1260
  382. 1416  DN=GS*(TD-TW(1))/3600
  383. 1418  CN=TK:L1=LL(1):G1=GL(1)
  384. 1420  GOSUB 2000
  385. 1422  F(0)=0:TW(1)=TD:LL(1)=L2:GL(1)=G2
  386. 1424  LS(1)=L2:GS(1)=G2
  387. 1426  FOR J=4 TO 7:DP(J)=CP(J):NEXT
  388. 1428  ZS(1)=ZS(2):FA(1)=FA(2):CC(1)=CC(2):AL(1)=AL(2)
  389. 1430  ZS=ZS(2):FA=FA(2):CC=CC(2):AL=AL(2)
  390. 1432  RETURN
  391. 1440  TW(1)=TD:F(0)=0
  392. 1442  AJ=ZS*COS(ABS(FA)/KR)
  393. 1444  GOSUB 1260
  394. 1446  DN=GS*TJ/3600
  395. 1448  CN=TK:L1=LS(1):G1=GS(1)
  396. 1450  GOSUB 2000
  397. 1452  LS(1)=L2:GS(1)=G2
  398. 1454  IF F(0)=1 GOTO 1458
  399. 1456  LL(1)=L2:GL(1)=G2
  400. 1458  GOTO 1426
  401. 1500  REM:VOR ROUTINE
  402. 1502  IF VO(1)=0 GOTO 1540
  403. 1504  FOR J=0 TO 15:IF VO(1)=VF(J) GOTO 1506
  404. 1505  NEXT:GOTO 1540
  405. 1506  LC=VP(J,0):GC=VP(J,1)
  406. 1508  LB=L2:GB=G2
  407. 1509  AR=VG(J,0):LL=VG(J,1)
  408. 1510  LO=360-LL
  409. 1512  GOSUB 1200
  410. 1514  IF DR>300 GOTO 1540
  411. 1516  IF CR=>360 THEN CR=CR-360
  412. 1517  GOTO 1578
  413. 1518  VO$(1)="FROM"
  414. 1519  VO(5)=CR-VO(3):IF VO(5)<=180 GOTO 1522
  415. 1520  VO(5)=VO(5)-360:GOTO 1524
  416. 1522  IF VO(5)<-180 THEN VO(5)=VO(5)+360
  417. 1524  IF ABS(VO(5))>90 THEN I1=VO(3):GOTO 1536
  418. 1526  IF VO$(1)="FROM" THEN I=-1 ELSE I=1
  419. 1527  IF I=1 THEN VO(3)=I1
  420. 1528  VO(2)=40+I*INT(VO(5)):VO(4)=DR
  421. 1530  IF VO(2)<35 THEN VO(2)=34
  422. 1532  IF VO(2)>45 THEN VO(2)=46
  423. 1534  GOTO 1560
  424. 1536  VO$(1)=" TO ":VO(3)=VO(3)+180:IF VO(3)=>360 THEN VO(3)=VO(3)-360
  425. 1538  GOTO 1519
  426. 1540  VO$(1)="OUT ":VO(4)=999.9:F(3)=0:RETURN
  427. 1546  IF DR>12 OR DR<10 THEN MK=0:GOTO 1518
  428. 1548  IF AL>4000 THEN MK=0:GOTO 1518
  429. 1550  IF F(1) =1 THEN J=9 ELSE J=2.5
  430. 1552  IF CR>AR+J OR CR<AR-J THEN MK=0:GOTO 1518
  431. 1554  F(1)=1:MK=1:GOTO 1518
  432. 1560  LOCATE 19,22:IF MK=1 THEN COLOR 0,7:PRINT"  ":COLOR 7,0:ELSE PRINT"  "
  433. 1566  IF MK=0 THEN F(1)=0:RETURN
  434. 1570  IF CC>LL+1 OR CC<LL-1 THEN RETURN
  435. 1572  IF RA<>0 THEN RETURN
  436. 1574  F(1)=0:F(2)=1
  437. 1576  GOTO 1540
  438. 1578  IF F(3)=1 THEN VO(3)=CR:F(3)=0
  439. 1580  GOTO 1546
  440. 1600  REM:ILS ROUTINE
  441. 1602  ZN=AL:TH=2.82471:MK=1
  442. 1603  DW=1.69*RW*TJ:IF F(7)=1 THEN DW=0
  443. 1604  IF F(7)=1 THEN CC=LL:RA=0
  444. 1606  CJ=CC
  445. 1608  IF CJ>180 THEN CJ=360-CJ:CJ=-1*CJ
  446. 1610  HA=LO+CJ
  447. 1612  DC=360-HA:TS=1:IF HA<180 THEN DC=HA:TS=-1
  448. 1614  IF DC<0 THEN DC=-1*DC:TS=-1*TS
  449. 1616  TL$="W":IF TS=1 THEN TL$="E"
  450. 1618  DD=1.69*ZS*TJ
  451. 1620  DY=DD*SIN(DC/KR):DX=DD*COS(DC/KR)
  452. 1622  XN=XO-DX:IF TL$="E" THEN DY=-1*DY
  453. 1624  YN=YO+DY+DW
  454. 1626  LM=KR*ATN(AL/XN)
  455. 1628  BE=KR*ATN(ABS(YN)/ABS(XN)):IF BE>2.5 THEN MK=0
  456. 1630  J=(LM-TH)/0.25:J=FIX(J)
  457. 1632  IF J>3 THEN J=3
  458. 1633  IF J<-3 THEN J=-3
  459. 1636  BE=BE/0.25:BE=FIX(BE)
  460. 1637  IF BE<-7 THEN BE=-7
  461. 1638  IF BE>7 THEN BE=7
  462. 1639  IF YN>0 THEN BE=-1*BE
  463. 1640  IF MK=0 GOTO 1648
  464. 1642  IF XN>34960 AND XN<38000 GOTO 1648
  465. 1644  IF XN>2534 AND XN<5574 GOTO 1648
  466. 1646  MK=0
  467. 1648  GX(1)=BE:GY(1)=J
  468. 1650  GOSUB 2100
  469. 1654  LOCATE 19,22:IF MK=1 THEN COLOR 0,7:PRINT"  ":COLOR 7,0:ELSE PRINT"  "
  470. 1662  XO=XN:YO=YN
  471. 1664  IF F8=1 GOTO 1676
  472. 1666  IF XN>12000 GOTO 1676
  473. 1668  F8=1
  474. 1670  FOR I=0 TO 3
  475. 1672  LOCATE (14+I),50:PRINT RS$(I)
  476. 1674  NEXT I
  477. 1676  IF F8=0 GOTO 1699
  478. 1678  LOCATE 18,(XQ+1):PRINT" "
  479. 1680  YU=FIX(YN/16.7):XC=64+YU
  480. 1682  IF XC<49 THEN XC=49
  481. 1684  IF XC>79 THEN XC=79
  482. 1686  LOCATE 18,(XC+1):PRINT CHR$(24)
  483. 1688  XQ=XC
  484. 1699  GOTO 1031
  485. 1700  GOTO 1799
  486. 1799  GOTO 224
  487. 1800  REM:REVERSE THRUST APPLIED
  488. 1802  IF F(4)=1 GOTO 1806
  489. 1804  VO=ZS*1.152*1.47:F(4)=1
  490. 1806  V=VO-(3.23636)*TJ
  491. 1808  IF V<=0 THEN V=0
  492. 1810  VO=V
  493. 1812  ZS=V/(1.152*1.47)
  494. 1814  RETURN
  495. 2000  REM:COMPUTES NEW POSITION
  496. 2004  IF CN=0 THEN CA=0:LB(5)=1:LB(6)=1:GOTO 2014
  497. 2006  IF CN>0 AND CN<=90 THEN CA=CN:LB(5)=1:LB(6)=1:GOTO 2014
  498. 2008  IF CN>90 AND CN<=180 THEN CA=180-CN:LB(5)=-1:LB(6)=1:GOTO 2014
  499. 2010  IF CN>180 AND CN<=270 THEN CA=CN-180:LB(5)=-1:LB(6)=-1:GOTO 2014
  500. 2012  CA=360-CN:LB(5)=1:LB(6)=-1
  501. 2014  IF CA>89.5 GOTO 2034
  502. 2016  DL=DN*COS(CA/KR):DL=DL/60:LB(3)=LB(5)
  503. 2018  IF LB(3)=1 THEN L2=L1+DL:GOTO 2024
  504. 2020  L2=ABS(L1-DL)
  505. 2024  LA=L1:GOSUB 2400
  506. 2026  M1=MP
  507. 2028  LA=L2:GOSUB 2400
  508. 2030  M2=MP
  509. 2032  DM=ABS(M1-M2):DG=DM*TAN(CA/KR):GOTO 2036
  510. 2034  L2=L1:DG=DN/COS(L1/KR)
  511. 2036  DG=DG/60:LB(4)=LB(6)
  512. 2038  IF LB(4)=-1 GOTO 2046
  513. 2040  G2=ABS(G1-DG)
  514. 2044  GOTO 2050
  515. 2046  G2=G1+DG
  516. 2050  CP(4)=FIX(L2):CP(5)=(L2-CP(4))*60
  517. 2052  CP(6)=FIX(G2):CP(7)=(G2-CP(6))*60
  518. 2054  RETURN
  519. 2100  REM:PLOT GLIDE SLOPE CROSSHAIRS
  520. 2101  IF XO<=750 THEN RETURN
  521. 2102  X0=8+GX(0):X1=8+GX(1):Y0=18+GY(0):Y1=18+GY(1)
  522. 2104  FOR Y=15 TO 21:LOCATE (Y+1),(X0+1):PRINT" ":NEXT
  523. 2106  LOCATE (Y0+1),2:PRINT STRING$(15,32)
  524. 2108  FOR Y=15 TO 21:LOCATE (Y+1),(X1+1):PRINT CHR$(197):NEXT
  525. 2110  LOCATE (Y1+1),2:PRINT STRING$(15,197)
  526. 2112  LOCATE (Y1+1),(X1+1):PRINT CHR$(43)
  527. 2114  LOCATE 19,9:PRINT"O"
  528. 2116  GX(0)=GX(1):GY(0)=GY(1)
  529. 2118  RETURN
  530. 2400  REM:COMPUTES MERIDIONAL PARTS, MP
  531. 2404  KM(0)=7915.7
  532. 2406  KM(1)=23.2689
  533. 2408  KM(2)=0.0525
  534. 2410  KM(3)=0.000212999
  535. 2414  IF LA=0 THEN LA=0+1/60
  536. 2416  IF LA>(89+59/60) THEN LA=89+59/60
  537. 2418  S1=SIN(LA/KR)
  538. 2420  S2=S1*S1:S3=S1*S2
  539. 2422  TM(0)=TAN((45+LA/2)/KR)
  540. 2424  TM(0)=KM(0)*LOG(TM(0))/LOG(10)
  541. 2426  TM(1)=KM(1)*S1
  542. 2428  TM(2)=KM(2)*S3
  543. 2430  TM(3)=KM(3)*S2*S3
  544. 2432  MP=TM(0)-TM(1)-TM(2)-TM(3)
  545. 2436  RETURN
  546. 3000  REM:ABORT ROUTINES
  547. 3002  M$(1)="---------- A CRASH HAS OCCURED ----------"
  548. 3004  M$(2)="YOU ACCIDENTLY STALLED THE AIRCRAFT DURING FINAL APPROACH."
  549. 3006  M$(3)="THE STALL OCCURRED AT AN ALTITUDE OF"
  550. 3008  M$(4)="THE AIRCRAFT STRUCK THE GROUND IN A NOSE-HIGH ATTITUDE."
  551. 3010  M$(5)="THE IMPACT RUPTURED THE TAIL SECTION OF THE FUSELAGE."
  552. 3012  M$(6)="---- LOCATION OF CRASH ----"
  553. 3013  M$(7)="---- LANDING POSITION ----"
  554. 3016  M$(8)="    PITCH ANGLE="
  555. 3018  M$(9)="    AIRSPEED="
  556. 3020  M$(10)="YOU FLARED AT TOO HIGH AN ALTITUDE DURING FINAL APPROACH."
  557. 3022  M$(11)="THE RESULTING STALL OCCURED AT AN ALTITUDE OF"
  558. 3024  M$(12)="THE IMPACT RUPTURED THE "
  559. 3026  M$(13)="YOU FORGOT TO LOWER THE LANDING GEAR."
  560. 3028  M$(14)="YOU FAILED TO TOUCH DOWN INSIDE THE RUNWAY."
  561. 3030  M$(15)="---------- AN IMPROPER LANDING WAS MADE ----------"
  562. 3032  M$(16)="NO DAMAGE OR INJURIES OCCURRED.
  563. 3033  RL=0:IF TX>100 THEN RL=1
  564. 3034  RW=0:IF ABS(TY)>100 THEN RW=1
  565. 3040  N$(2)="FEET INSIDE OF RUNWAY"
  566. 3041  IF TX=>0 THEN N$(2)="FEET SHORT OF RUNWAY"
  567. 3042  N$(3)="FEET TO LEFT OF RUNWAY CENERLINE"
  568. 3043  IF TY=>0 THEN N$(3)="FEET TO RIGHT OF RUNWAY CENTERLINE"
  569. 3044  RX=FIX(TX):RX=ABS(RX)
  570. 3045  RY=FIX(TY):RY=ABS(RY)
  571. 3050  IF AF=0 GOTO 3600
  572. 3055  ZS=INT(AX):FA=INT(FA):ZS=INT(ZS)
  573. 3060  ON AF GOTO 3100,3150,3200,3250,3300,3350,3400,3450,3500,3550
  574. 3100  GOSUB 3700
  575. 3101  YP=4:XP=55:F$="##,###":V1=AL:GOSUB 9000
  576. 3102  LOCATE 16,1:PRINT M$(1)
  577. 3104  PRINT"YOU FLEW INTO THE GROUND."
  578. 3106  PRINT"THE INSTRUMENT READINGS AT TIME OF THE CRASH ARE SHOWN AS ABOVE."
  579. 3108  END
  580. 3150  CLS
  581. 3152  PRINT M$(1)
  582. 3154  PRINT M$(2)
  583. 3156  PRINT M$(3);AX;"FEET."
  584. 3158  PRINT M$(4)
  585. 3160  PRINT M$(5)
  586. 3162  N$(1)=M$(6)
  587. 3164  GOSUB 3800
  588. 3166  END
  589. 3200  CLS
  590. 3202  PRINT M$(1)
  591. 3204  PRINT"YOU FLEW INTO THE GROUND DURING FINAL APPROACH."
  592. 3206  PRINT"AT THE TIME OF THE CRASH THE AIRCRAFT PROFILE WAS AS FOLLOWS :"
  593. 3208  PRINT M$(8);FA;"DEGREES"
  594. 3210  PRINT M$(9);ZS
  595. 3212  N$(1)=M$(6)
  596. 3214  GOSUB 3800
  597. 3216  END
  598. 3250  CLS
  599. 3252  PRINT M$(1)
  600. 3254  PRINT M$(10)
  601. 3256  PRINT M$(11);AX;"FEET."
  602. 3258  PRINT M$(12)+"FUSELAGE."
  603. 3260  N$(1)=M$(6)
  604. 3262  GOSUB 3800
  605. 3264  END
  606. 3300  CLS
  607. 3302  IF WH=10 THEN PRINT M$(1)
  608. 3304  IF WH=12 THEN PRINT"---------- A MINOR CRASH HAS OCCURRED ----------"
  609. 3306  PRINT M$(10)
  610. 3308  PRINT M$(11);AX;"FEET."
  611. 3310  IF WH=10 THEN PRINT M$(13)
  612. 3312  IF WH=10 THEN PRINT M$(12)+"FUSELAGE."
  613. 3314  IF WH=12 THEN PRINT"THE IMPACT DAMAGED THE LANDING GEAR."
  614. 3316  IF WH=12 THEN PRINT"ALL THE PASSENGERS HAVE BEEN SAFELY EVACUATED."
  615. 3318  N$(1)=M$(6)
  616. 3320  GOSUB 3800
  617. 3322  END
  618. 3350  CLS
  619. 3352  PRINT M$(1)
  620. 3354  PRINT M$(13)
  621. 3356  PRINT"THE AIRCRAFT LANDED ON ITS BELLY, CAUSING MODERATE DAMAGE."
  622. 3358  PRINT"ALL THE PASSENGERS HAVE BEEN SAFELY EVACUATED."
  623. 3360  N$(1)=M$(6)
  624. 3362  GOSUB 3800
  625. 3364  END
  626. 3400  CLS
  627. 3402  PRINT M$(15)
  628. 3404  PRINT M$(14)
  629. 3406  N$(1)=M$(7)
  630. 3408  GOSUB 3800
  631. 3410  END
  632. 3450  CLS
  633. 3452  PRINT M$(15)
  634. 3454  PRINT"YOU FAILED TO EXECUTE A FLARE PRIOR TO TOUCHING DOWN."
  635. 3456  PRINT"THIS IS A VIOLATION OF COMPANY PROCEDURES."
  636. 3458  PRINT M$(16)
  637. 3460  N$(1)=M$(7)
  638. 3462  GOSUB 3800
  639. 3464  END
  640. 3500  CLS
  641. 3502  PRINT M$(15)
  642. 3504  PRINT"YOU ROLLED OFF THE RUNWAY AFTER TOUCHING DOWN."
  643. 3506  PRINT M$(16)
  644. 3508  N$(1)=M$(7)
  645. 3512  GOSUB 3800
  646. 3513  PRINT
  647. 3514  IF XN>-9750 THEN PRINT"YOU ROLLED PAST FAR END OF RUNWAY"
  648. 3516  IF ABS(YN)>100 THEN PRINT"YOU ROLLED THROUGH RUNWAY SIDE BORDERS"
  649. 3518  END
  650. 3550  CLS
  651. 3552  PRINT"----- YOUR MISSED APPROACH SIGNAL IS ACKNOWLEDGED -----"
  652. 3554  PRINT"YOU HAVE FOLLOWED PROPER PROCEDURES."
  653. 3556  END
  654. 3600  CLS
  655. 3602  PRINT"----- YOU HAVE SUCCESSFULLY COMPLETED THE FLIGHT -----"
  656. 3604  PRINT"ALL PROCEDURES WERE PROPERLY EXECUTED."
  657. 3606  N$(1)=M$(7)
  658. 3610  PRINT"CONGRATULATIONS ON A SUCCESSFUL FLIGHT."
  659. 3612  GOSUB 3800
  660. 3613  PRINT
  661. 3614  XN=ABS(XN):JN=FIX(XN+750)
  662. 3615  YN=ABS(YN):YN=FIX(YN)
  663. 3616  PRINT"YOUR AIRCRAFT CAME TO REST AT THE FOLLOWING POSITION:"
  664. 3617  PRINT"     ";JN;"FEET INSIDE THE RUNWAY"
  665. 3618  PRINT"     ";YN;"FEET FROM RUNWAY CENTERLINE"
  666. 3620  END
  667. 3700  REM:SUBROUTINE TO CLEAR LOWER PART OF DISPLAY
  668. 3702  FOR I=9 TO 23
  669. 3704  LOCATE (I+1),1:PRINT SPC(79);
  670. 3706  NEXT I
  671. 3708  RETURN
  672. 3800  REM:LANDING STATISTICS
  673. 3802  PRINT
  674. 3804  PRINT SPACE$(26);N$(1)
  675. 3806  PRINT
  676. 3808  IF RL=0 THEN PRINT RX;N$(2)
  677. 3809  IF RL=1 THEN COLOR 0,7:PRINT RX;N$(2):COLOR 7,0
  678. 3810  PRINT
  679. 3812  IF RW=0 THEN PRINT RY;N$(3)
  680. 3813  IF RW=1 THEN COLOR 0,7:PRINT RY;N$(3):COLOR 7,0
  681. 3814  PRINT
  682. 3816  PRINT"--- SIZE OF RUNWAY IS 10,500 FEET  X  200 FEET ---"
  683. 3818  RETURN
  684. 5085  REM:TIME DELAY PAD
  685. 5090  FOR I=1 TO TQ
  686. 5095  NEXT I
  687. 5099  RETURN
  688. 7050  REM:CONVERT RTC TO TIME OF DAY IN SECONDS ABSOLUTE
  689. 7055  J=7
  690. 7060  FOR I=0 TO 2
  691. 7065  TC$(I)=MID$(TV$,J,2)
  692. 7070  J=J-3
  693. 7075  TC(I)=VAL(TC$(I))
  694. 7080  TD=(3600*TC(2))+(60*TC(1))+TC(0)
  695. 7085  NEXT I
  696. 7090  RETURN
  697. 9000  REM:PLOTS VARIABLE ON REVERSE BACKGROUND
  698. 9005  COLOR 0,7:LOCATE (YP+1),(XP+1)
  699. 9010  PRINT USING F$;V1;
  700. 9015  COLOR 7,0
  701. 9020  RETURN
  702. 9999  END
  703. 10000  REM:BEGIN TAKEOFF MODULE HERE, EH
  704. 10020  CLS:CLEAR 1000:RANDOMIZE 57.2958
  705. 10025  KR=57.2958
  706. 10030  DIM XM(13),WM(13)
  707. 10031  DIM P$(31)
  708. 10035  DATA 37,35,32,30,27,25,22,20,17,15,12,10,7,5
  709. 10040  DATA 6,11,16,21,26,31,36,41,46,51,56,61,66,71
  710. 10041  FOR I=0 TO 28:READ P$(I):NEXT
  711. 10045  FOR I=0 TO 13:READ XM(I):NEXT
  712. 10050  FOR I=0 TO 13:READ WM(I):NEXT
  713. 10055  M$(1)="_":M$(2)="_":M$(3)="_"
  714. 10060  DIM XE(13),WE(13)
  715. 10065  K1=29:K2=23
  716. 10070  FOR I=0 TO 13
  717. 10075  XE(I)=K1:WE(I)=K2
  718. 10080  K1=K1-2:K2=K2+4
  719. 10085  NEXT
  720. 10090  IO=40
  721. 10095  RN=RND(0)
  722. 10100  RS=1:IF RN>0.5 THEN RS=-1
  723. 10105  W1=75:IF RS=-1 THEN W1=255
  724. 10110  W2=RND(20):W3=RS*W2
  725. 10115  DIM XL(14),XR(14)
  726. 10120  J=31:K=49
  727. 10125  FOR I=0 TO 14
  728. 10130  XL(I)=J:XR(I)=K
  729. 10135  J=J-2:K=K+2
  730. 10140  NEXT
  731. 10145  DATA FUEL,LBS,%,VHF,MHZ,THRUST,MAX,IDLE,REV
  732. 10150  DATA PITCH," +"," -",DEG,FLAPS,UP,DWN,WHEELS,UP,MID,DOWN
  733. 10155  DATA COMPASS,AIRSPEED,KTS," VERT",SPEED,FPM
  734. 10160  DATA ALTITUDE,FEET,CLOCK,BRAKE,SET,REL
  735. 10170  FOR I=0 TO 31:READ P$(I):NEXT
  736. 10175  DIM S$(25)
  737. 10180  FOR I=1 TO 25:S$(I)=SPACE$(I):NEXT
  738. 10185  FOR I=0 TO 9:F(I)=0:NEXT
  739. 10190  REM:INIT VARIABLES FOR TAKEOFF MODE
  740. 10195  FU=200000:FP=0:CC=75:ZS=0:RC=0:AL=0
  741. 10200  MZ=107:TR=6:FL=2:FA=0:WH=13:IX=40:HY=9:BR=11:BK=11
  742. 10205  AB=0
  743. 10215  LOCATE 9,18:PRINT"AIR CANADA 312     CLEARED AS FILED"
  744. 10217  PRINT:PRINT
  745. 10218  PRINT"          SURFACE WINDS VARIABLE, GUSTING TO 15."
  746. 10219  PRINT"          MINIMUM CEILING CONDITIONS ARE IN EFFECT."
  747. 10230  PRINT"          SKY CONDITIONS AT 20,000 SCATTERED."
  748. 10235  PRINT"                         AT 30,000 BROKEN."
  749. 10240  PRINT:PRINT
  750. 10245  PRINT"UPON TAKEOFF, MAINTAIN HEADING 075 TO 3000, THEN PROCEED AS FILED."
  751. 10248  PRINT:PRINT:PRINT"        STANDBY FOR TAKEOFF CLEARANCE"
  752. 10255  TQ=7000:GOSUB 11535
  753. 10260  CLS
  754. 10265  LOCATE 11,18:PRINT"AIR CANADA 312":PRINT:PRINT
  755. 10270  PRINT"YOU ARE CLEARED FOR TAKEOFF AT 0800 HOURS"
  756. 10275  TQ=3000:GOSUB 11535
  757. 10280  CLS
  758. 10285  TIME$="07:59:00":KEY OFF:CLS
  759. 10290  TV$=TIME$:GOSUB 11555:TL=TD
  760. 10295  GOSUB 10330
  761. 10300  GOSUB 10410
  762. 10305  GOSUB 10480
  763. 10310  GOSUB 10615
  764. 10315  K$=INKEY$:IF LEN(K$)=0 GOTO 10325
  765. 10320  GOSUB 10790
  766. 10325  GOTO 10945
  767. 10330  REM:DISPLAY PANEL (HEADERS ONLY)
  768. 10335  LOCATE 1,4:PRINT P$(0);S$(4);P$(5);S$(3);P$(9);S$(3);S$(6);S$(3);P$(20)
  769. 10340  LOCATE 11,60:PRINT P$(13);S$(3);P$(16);S$(2);P$(29)
  770. 10345  LOCATE 12,62:PRINT P$(14);S$(6);P$(14);S$(6);P$(30)
  771. 10350  LOCATE 14,62:PRINT P$(15);S$(5);P$(15);S$(5);P$(31)
  772. 10352  IF F(9)=1 THEN RETURN
  773. 10355  LOCATE 2,14:PRINT P$(6);S$(6);P$(10);S$(6)
  774. 10360  LOCATE 2,69:PRINT P$(28)
  775. 10365  LOCATE 3,2:PRINT P$(1);S$(4);P$(2);S$(21);S$(3);S$(13);P$(23)
  776. 10370  LOCATE 4,23:PRINT P$(11);S$(13);P$(21);S$(2);P$(24);S$(2);P$(26)
  777. 10375  LOCATE 5,1:PRINT P$(3)
  778. 10380  LOCATE 6,40:PRINT P$(22);S$(6);P$(25);S$(5);P$(27)
  779. 10385  LOCATE 7,1:PRINT P$(4);S$(10);P$(7);S$(3);P$(12);S$(7)
  780. 10390  LOCATE 8,14:PRINT P$(8)
  781. 10395  FOR Y=1 TO 7:LOCATE (Y+1),13:PRINT CHR$(195):NEXT
  782. 10400  FOR Y=1 TO 3:LOCATE (Y+1),22:PRINT CHR$(195):NEXT
  783. 10405  RETURN
  784. 10410  REM:DISPLAY HORIZONTAL LINE
  785. 10415  IF F(9)=0 GOTO 10430
  786. 10420  LOCATE 10,1:PRINT SPACE$(80);
  787. 10425  IF HY=20 GOTO 10440
  788. 10430  LOCATE (HY+1),1:PRINT STRING$(80,"_")
  789. 10435  RETURN
  790. 10440  OH=9:HY=10
  791. 10445  FOR I=HY TO 22
  792. 10450  LOCATE (OH+1),1:PRINT SPACE$(80);
  793. 10455  LOCATE (I+1),1:PRINT STRING$(80,"_");
  794. 10460  OH=I
  795. 10465  NEXT I
  796. 10470  LOCATE 24,(IO+1):PRINT" ";
  797. 10475  RETURN
  798. 10480  REM:DISPLAY RUNWAY
  799. 10485  IF F(4)=1 GOTO 10525
  800. 10490  S=10:X=29
  801. 10495  FOR Y=10 TO 22
  802. 10500  LOCATE (Y+1),(X+1):PRINT ".";SPACE$(S);" ";SPACE$(S);".";
  803. 10505  X=X-2:S=S+2
  804. 10510  NEXT
  805. 10515  S$=S$(13)
  806. 10520  RETURN
  807. 10525  REM:PRINTS RUNWAY GRAPHICS
  808. 10530  IF N>3 GOTO 10600
  809. 10535  LOCATE (OY+1),(OX+1):PRINT SPACE$(WM);
  810. 10540  LOCATE (NY+1),(NX+1):PRINT MK$;
  811. 10545  OY=NY:OX=NX
  812. 10550  WM=FW
  813. 10555  RETURN
  814. 10560  REM:ENTRY WHEN SHIP IN FINAL ZONE
  815. 10565  LOCATE (OY+1),(OX+1):PRINT SPACE$(WM):IF F(9)=1 THEN RETURN
  816. 10570  FOR I=10 TO NY-1
  817. 10575  LOCATE (I+1),(XE(J)+1):PRINT SPACE$(WE(J))
  818. 10580  NEXT I
  819. 10585  IF N>4 THEN RETURN
  820. 10590  LOCATE (NY+1),(XY+1):PRINT MK$;
  821. 10595  RETURN
  822. 10600  IF F(2)=1 GOTO 10560 ELSE F(2)=1
  823. 10605  FOR I=10 TO 13:LOCATE (I+1),60:PRINT SPACE$(21):NEXT
  824. 10610  GOTO 10560
  825. 10615  REM:DISPLAY INSTRUMENT READINGS
  826. 10618  LOCATE 1,67:COLOR 0,7:PRINT TIME$:COLOR 7,0
  827. 10620  YP=1:XP=0:F$="######":V1=FU:GOSUB 11600
  828. 10625  YP=1:XP=7:F$="###":V1=FP:GOSUB 11600
  829. 10630  YP=1:XP=39:V1=CC:GOSUB 11600
  830. 10635  YP=4:XP=39:V1=ZS:GOSUB 11600
  831. 10640  YP=4:XP=46:F$="######":V1=RC:GOSUB 11600
  832. 10645  YP=4:XP=55:F$="##,###":V1=AL:GOSUB 11600
  833. 10650  YP=5:XP=0:F$="###":V1=MZ:GOSUB 11600
  834. 10655  REM:DISPLAY THRUST
  835. 10660  FOR I=1 TO 7
  836. 10665  LOCATE (I+1),12:PRINT" ";CHR$(195)
  837. 10670  NEXT
  838. 10675  LOCATE (TR+1),12:PRINT">"
  839. 10680  REM:DISPLAY PITCH
  840. 10685  FOR I=1 TO 3:LOCATE (I+1),21:PRINT" ";CHR$(195):NEXT
  841. 10690  LOCATE (FL+1),21:PRINT">"
  842. 10695  F$="+###"
  843. 10700  YP=5:XP=20:V1=FA:GOSUB 11600
  844. 10705  REM:DISPLAY FLAPS
  845. 10710  IF F(2)=1 GOTO 10760
  846. 10715  FOR I=11 TO 13:LOCATE (I+1),60:PRINT" ";CHR$(195):NEXT
  847. 10720  LOCATE (BR+1),60:PRINT">"
  848. 10725  REM:WHEELS
  849. 10730  FOR I=11 TO 13:LOCATE (I+1),68:PRINT" ";CHR$(195):NEXT
  850. 10735  LOCATE (WH+1),68:PRINT">"
  851. 10740  REM:BRAKES
  852. 10745  FOR I=11 TO 13:LOCATE (I+1),76:PRINT" ";CHR$(195):NEXT
  853. 10750  LOCATE (BK+1),76:PRINT">"
  854. 10760  REM:DISPLAY RUNWAY ALIGNMENT INDEX
  855. 10765  IF F(9)=1 THEN RETURN
  856. 10770  LOCATE 24,(IO+1):PRINT" ";
  857. 10775  LOCATE 24,(IX+1):PRINT CHR$(24);
  858. 10780  IO=IX
  859. 10785  RETURN
  860. 10790  REM:POLL KEY SUBROUT
  861. 10795  IF K$="F" THEN KK=1:GOTO 10820
  862. 10800  IF K$="," OR K$="." THEN KK=2:GOTO 10820
  863. 10805  IF K$="B" THEN KK=3:GOTO 10820
  864. 10810  IF K$="U" OR K$="D" THEN KK=4:GOTO 10820
  865. 10815  IF K$="L" THEN KK=5:GOTO 10820
  866. 10817  IF K$="W" THEN KK=6:GOTO 10820
  867. 10818  IF K$="S" THEN KK=7:GOTO 10820
  868. 10820  ON KK GOSUB 10830,10845,10865,10880,10925,10941,10826
  869. 10825  RETURN
  870. 10826  REM:THRUST KEY (DECREASE)
  871. 10827  IF F(7)=1 AND BR=11 THEN TR=4
  872. 10829  RETURN
  873. 10830  REM:THRUST KEY (INCREASE)
  874. 10831  IF F(7)=1 THEN RETURN
  875. 10835  F(1)=1:TR=1:RETURN
  876. 10845  REM:RUDDER KEYS
  877. 10846  IF F(7)=1 THEN RETURN
  878. 10850  IF ZS<=50 THEN RETURN
  879. 10855  IF K$="," THEN CC=CC-1 ELSE CC=CC+1
  880. 10860  RETURN
  881. 10865  REM:BRAKES
  882. 10870  IF F(0)=1 THEN RETURN
  883. 10875  F(0)=1:BK=13:RETURN
  884. 10880  REM:PITCH
  885. 10881  IF F(7)=1 THEN RETURN
  886. 10885  IF ZS<=50 THEN RETURN
  887. 10890  FD=-10:IF K$="U" THEN FD=10
  888. 10895  FA=FA+FD
  889. 10900  IF FA>60 THEN FA=60
  890. 10905  IF FA<-60 THEN FA=-60
  891. 10910  IF FA>0 THEN FL=1:RETURN
  892. 10915  IF FA=0 THEN FL=2:RETURN
  893. 10920  FL=3:RETURN
  894. 10925  REM:FLAPS
  895. 10926  IF F(7)=1 AND WH=11 THEN BR=11:RETURN
  896. 10930  IF F(3)=1 THEN RETURN
  897. 10935  IF F(3)=0 THEN F(3)=1:BR=13:RETURN
  898. 10940  RETURN
  899. 10941  REM:WHEELS
  900. 10942  IF F(7)=1 THEN WH=11
  901. 10944  RETURN
  902. 10945  REM:SITUATION UPDATE ROUTINE
  903. 10950  TV$=TIME$:GOSUB 11555:TJ=TD-TL:TL=TD
  904. 10955  IF F(9)=1 GOTO 12000
  905. 10960  IF F(0)=1 GOTO 10970
  906. 10965  GOSUB 11130:GOTO 10310
  907. 10970  IF F(4)=1 GOTO 10990
  908. 10975  F(4)=1
  909. 10980  XX=0:YY=0
  910. 10985  TD=TD:V0=0:N=1:OY=23:OX=5:WM=71
  911. 10990  REM:
  912. 10995  A=(118-18*TR)*0.04028
  913. 11000  GOSUB 11190
  914. 11005  IF AL>0 GOTO 11060
  915. 11010  IF YY>10500 OR ABS(XX)>100 GOTO 11390
  916. 11015  IF FA<=0 GOTO 11100
  917. 11020  IF ZS<150 GOTO 11385
  918. 11025  IF FA>10 GOTO 11385
  919. 11030  IF F(3)=0 GOTO 11100
  920. 11035  AL=25
  921. 11040  GOSUB 11130
  922. 11045  GOSUB 11150
  923. 11050  GOSUB 11300
  924. 11055  GOTO 10305
  925. 11060  F(9)=1
  926. 11065  GOSUB 11130
  927. 11070  GOSUB 11150
  928. 11075  GOSUB 11170
  929. 11080  FOR I=10 TO 22:LOCATE (I+1),1:PRINT SPACE$(80);:NEXT
  930. 11085  HY=20
  931. 11090  GOSUB 10410
  932. 11095  GOTO 11115
  933. 11100  GOSUB 11130
  934. 11105  GOSUB 11300
  935. 11110  GOTO 10305
  936. 11115  REM:NOW DO DEPARTURE PROCEDURES
  937. 11120  GOTO 10310
  938. 11130  REM:UPDATE FUEL
  939. 11135  FU=FU-40*TJ
  940. 11140  FP=FU/3120
  941. 11145  RETURN
  942. 11150  REM:UPDATE RATE OF CLIMB
  943. 11155  RC=ZS*SIN(ABS(FA/57.3))*1.693*60
  944. 11160  IF FA<0 THEN RC=-1*RC
  945. 11165  RETURN
  946. 11170  REM:UPDATE ALT
  947. 11175  AL=AL+TJ*RC/60
  948. 11180  IF AL<=0 THEN AL=0
  949. 11185  RETURN
  950. 11190  REM:EQUATIONS OF MOTION
  951. 11195  T=TJ
  952. 11200  V=V0+A*T
  953. 11205  VB=(V+V0)/2:V0=V
  954. 11210  S=VB*T
  955. 11215  IF TD<(TX+18) GOTO 11235
  956. 11220  TX=TD
  957. 11225  WB=RS*RND(2)
  958. 11230  CC=CC+WB
  959. 11235  DA=(CC-75)/57.3
  960. 11240  DY=S*COS(ABS(DA))
  961. 11245  DX=S*SIN(ABS(DA))
  962. 11250  IF DA<0 THEN DX=-1*DX
  963. 11255  YY=YY+DY
  964. 11260  XX=XX+DX
  965. 11265  ZS=V/1.69278
  966. 11270  IF ZS>20 THEN ZS=ZS+WS
  967. 11275  IX=40+FIX(XX*7/20):IF IX>79 THEN IX=79
  968. 11280  IF IX<0 THEN IX=0
  969. 11285  ZP=FIX(YY-2500*(N-1))
  970. 11290  IF ZP>2500 THEN N=N+1:GOTO 11285
  971. 11295  RETURN
  972. 11300  REM:VARIABLES FOR RUNWAY GRAPHICS
  973. 11305  MP=FIX(10+(13*ZP)/2500)
  974. 11310  IF N>3 GOTO 11350
  975. 11315  NY=MP
  976. 11320  J=NY-10
  977. 11325  NX=XM(J)
  978. 11330  FW=WM(J)
  979. 11335  S$=SPACE$(J)
  980. 11340  MK$=M$(N)+S$(J)+"_"+S$(J)+"_"+S$(J)+"_"+S$(J)+"_"+S$(J)+"_"
  981. 11345  RETURN
  982. 11350  REM:IN ZONE 4-MARKER IS RUNWAY EDGE
  983. 11355  NY=MP
  984. 11360  J=NY-10
  985. 11365  NX=XE(J)
  986. 11370  IF N>4 THEN RETURN
  987. 11375  MK$=STRING$(WE(J),"_")
  988. 11380  RETURN
  989. 11385  AB=1:GOTO 11415
  990. 11390  AB=2:IF YY<10500 GOTO 11415
  991. 11395  FOR I=10 TO 22
  992. 11400  LOCATE (I+1),1:PRINT SPACE$(80);
  993. 11405  NEXT I
  994. 11410  GOTO 11415
  995. 11415  REM:ABORT
  996. 11420  FOR I=10 TO 22
  997. 11425  LOCATE (I+1),1:COLOR 0,7:PRINT SPACE$(80);
  998. 11430  NEXT I
  999. 11435  LOCATE 11,30:PRINT"*** TAKEOFF FAILED ***":PRINT:PRINT
  1000. 11440  ON AB GOSUB 11455,11480
  1001. 11445  LOCATE 20,35:COLOR 7,0:PRINT"END OF PROGRAM";
  1002. 11450  END
  1003. 11455  PRINT"YOU PULLED BACK ON THE STICK AT TOO SLOW A SPEED, OR YOU"
  1004. 11460  PRINT"PULLED BACK THE STICK TOO FAR WHEN AT PROPER SPEED."
  1005. 11465  PRINT"AS A RESULT, THE TAIL OF THE FUSELAGE SCRAPED THE RUNWAY"
  1006. 11470  PRINT"AND THE AIRCRAFT SPUN OUT OF CONTROL."
  1007. 11475  RETURN
  1008. 11480  IF YY>10500 GOTO 11505
  1009. 11485  PRINT"YOU FAILED TO STAY WITHIN THE RUNWAY BOUNDARIES."
  1010. 11490  PRINT"AS A RESULT, YOU VEERED OFF THE RUNWAY AND COLLIDED WITH"
  1011. 11495  PRINT" THE RUNWAY LIGHTS."
  1012. 11500  RETURN
  1013. 11505  PRINT" YOU RAN OUT OF RUNWAY. AS A RESULT, YOU ROLLED INTO THE"
  1014. 11510  PRINT" MARSHLANDS LOCATED";FIX(YY)-10500;"FEET PAST THE END OF THE RUNWAY."
  1015. 11515  IF F(3)=1 THEN RETURN
  1016. 11520  PRINT:PRINT:PRINT" YOU FORGOT TO LOWER THE FLAPS."
  1017. 11525  PRINT" AS A RESULT, THE AIRCRAFT COULD NOT DEVELOP SUFFICIENT LIFT."
  1018. 11530  RETURN
  1019. 11535  REM:TIME DELAY PAD
  1020. 11540  FOR I=1 TO TQ
  1021. 11545  NEXT I
  1022. 11550  RETURN
  1023. 11555  REM:CONVERT RTC TO TIME OF DAY IN SECONDS, ABSOLUTELY
  1024. 11560  J=7
  1025. 11565  FOR I=0 TO 2
  1026. 11570  TC$(I)=MID$(TV$,J,2)
  1027. 11575  J=J-3
  1028. 11580  TC(I)=VAL(TC$(I))
  1029. 11585  TD=(3600*TC(2))+(60*TC(1))+TC(0)
  1030. 11590  NEXT I
  1031. 11595  RETURN
  1032. 11600  REM:PLOTS VARIABLE ON REVERSE BACKGROUND
  1033. 11605  COLOR 0,7:LOCATE (YP+1),(XP+2)
  1034. 11610  PRINT USING F$;V1;
  1035. 11615  COLOR 7,0
  1036. 11620  RETURN
  1037. 12000  REM:DEPARTURE ROUTINE
  1038. 12010  IF F(7)=1 GOTO 12025 ELSE F(7)=1
  1039. 12015  GOSUB 10340
  1040. 12020  F(2)=0
  1041. 12025  IF WH<>11 GOTO 12040 ELSE ZS=ZS+5
  1042. 12030  IF BR<>11 GOTO 12040 ELSE ZS=ZS+5
  1043. 12035  IF TR=4 AND AL>1800 GOTO 24 ELSE GOTO 12090
  1044. 12040  IF AL<1200 GOTO 12090
  1045. 12042  LOCATE 13,1:PRINT"******** FLIGHT ABORTED **********"
  1046. 12044  PRINT:PRINT
  1047. 12046  PRINT"YOU FAILED TO PERFORM CRUCIAL TRIM MANOUVERS FOLLOWING LIFTOFF."
  1048. 12048  PRINT" THE PROPER TRIM SEQUENCE, WHICH MUST BE COMPLETED BELOW 1200 FEET, IS AS FOLLOWS:"
  1049. 12050  PRINT"   1-RAISE LANDING GEAR"
  1050. 12054  PRINT"   3-REDUCE THRUST"
  1051. 12055  PRINT"   2-RETRACT FLAPS"
  1052. 12056  PRINT
  1053. 12058  PRINT"--------------- END OF PROGRAM --------------"
  1054. 12060  END
  1055. 12090  GOSUB 11130
  1056. 12092  GOSUB 11150
  1057. 12094  GOSUB 11170
  1058. 12099  GOTO 10310
  1059. 13000  REM:END OF LISTING
  1060.